System and method of using binary dynamic rest messages

ABSTRACT

A system and method thereof of a communication device. The device includes a port configured to receive a plurality of binary data streams having a binary header and a binary body. The device includes a memory storing a first structural description of the binary header and the binary body and a second structural description of a metadata construct of the message. The device includes a processor configured to parse a received binary data stream using the first structural description to determine the binary header and the binary body. The processor parses the binary body using the second structural description to determine the one or more groups of description values forming the metadata construct where the processor uses a portion of the determined description values of the metadata construct to determine the one or more groups of data values of the message construct.

FIELD OF THE INVENTION

This invention generally relates to machine-to-machine communication.More particularly, in certain embodiment, the invention relates to usingbinary dynamic REST messages to communicate between devices.

BACKGROUND

The business of building a connected world, also referred to as theInternet of Things, is rapidly growing. Some industry analysts haveestimated that the number of connected devices and systems (in anindustrial, consumer, government, and business setting) may rise fromfive billion devices to a trillion devices over the next ten years. Asubstantial portion of that growth will be devices and systems usingwireless communication, such as over cellular networks.

Common challenges in the controls and management of such connecteddevices include scalability and operability, not only within aparticular vendor's own platform, but among the various platforms beingoffered by different vendors. One particular intersection of thesechallenges is the communication protocol used in the controls andmanagement of such devices. These protocols define how devices talkamong each other, what they say, when they say it, and who they say itto. Another intersection of these challenges is the architecturedefining the organization of these devices.

To promote inter/intra-operability, a flexible protocol is desired. Apopular communication protocol and architecture is the HypertextTransfer Protocol-based (HTTP) REpresentational State Transfer (REST)application programming interface (API), also referred to as “HTTPRESTful API.” REST is a style of software architecture for distributedsystems that may employ a standardized interface, such as HTTP. Anapplication conforming to the REST constraints may be described as“RESTful”.

In some implementations, HTTP RESTful API may use open standard formats.Two popular open standard formats include JavaScript Object Notation(“JSON”) and Extensive Markup Language (“XML”) data formatting. Bothformats employ human-readable text to transmit data objects and, thus,provide a flexible and open scheme for communication. The trade-off forsuch open standard formats is verbosity.

HTTP is the foundation of data communication for the World Wide Web(commonly referred to as the “Web”), which is a system of interlinkedhypertext documents accessible via the Internet. The Internetcollectively describes an interconnected network of computers andnetworks. Although HTTP is not restrictive as a communication protocol,the usage of HTTP has been limited to unidirectional communication dueto traffic routing devices and security devices, such as firewalls andNetwork Address Translation, employed with a computing and networkinfrastructure often employ security mechanisms.

HTTP polling is a typical technique used to overcome the unidirectionalnature of HTTP across such Internet infrastructure. The techniqueprovides firewall transparency and two-way communication, but at atradeoff of high reply-message latency responsiveness, high bandwidthconsumption, and high server utilization.

SUMMARY

In general overview, a vast number of computing devices connects to acomputing platform that services data and information for the computingdevices. This disclosure describes the usage of persistent connections,such as provided by WebSocket API protocols, to provide a low latencybidirectional connection between two nodes in a network.

To promote inter/intra-operability while reducing bandwidth usage overthis connection, a messaging protocol is employed to serialized thebinary data of messages constructed from data- and informational-modelsthat are understood by the computing application operating at both theends of the transmission node. For example, in some implementations,this protocol uses a binary representation of message- andmetadata-constructs of existing dynamic REST API protocols. Theprotocol, in some implementations, is easily convertible to and fromopen standard formats, such as JavaScript Object Notation (JSON).

To promote ease of use of the protocol, the protocol may employ asimilar request/response construct as HTTP, though in binary format.Layered on to of this is a RESTful style architecture that supports thereading/writing of data, executing remote procedures (services), eventtransport, and extended functionality such as file transfer andapplication tunneling.

To facilitate the transmission of large messages using a small fixedmemory usage of each connection, the protocol chunks the message andreassembles them at the application level rather than at the transportlevel.

To reduce the memory requirement for the protocol, in someimplementations, the protocol encodes a first portion set of a messagewith binary representations using symbols from a codebook library. Insome implementations, the binary representation includes byteenumerations. The protocol may convert a second portion set of themessage using standard data formats that are native to a given computingdevice. Examples of such standard data formats may include the Unicodecharacters, such as UTF-8.

In one aspect, the present disclosure describes a communication deviceincluding a port configured to receive binary data streams representingmessages. Each of the data stream may include a binary header and abinary body. The binary body may have a metadata construct and a messageconstruct in which the message construct includes one or more groups ofdata values. The metadata construct may include one or more groups ofdescription values corresponding to a given data value of the one ormore data values forming the message construct.

In some implementations, the communication device includes a memory thatstores a first structural description of binary header and a binarybody. The memory may also store a second structural description of themetadata construct. The binary header may be unencrypted where thebinary body is encrypted.

In some implementations, the communication device may include aprocessor. The processor may parse a received binary data stream toreproduce a received message. The processor may parse the receivedbinary data stream using the first structural description to determinethe binary header and the binary body. The processor may parse thebinary body using the second structural description to determine the oneor more groups of description values forming the metadata construct. Theprocessor may use a portion of the determined description values of themetadata construct to determine the one or more groups of data values ofthe message construct.

In some implementations, each of the one or more data values of themessage construct and each of the one or more description value of themetadata construct may be delineated by a binary marker. The binarymarker may be a single byte long. The binary marker may include a firstvalue to define each beginning of a data value set or a descriptionvalue set and a second value to define an end of each of the metadataconstruct and the message construct. The entire message construct may bedelimited only with the binary marker.

In some implementations, each of the one or more groups of descriptionvalues may form the metadata construct having a data-value namedescriptor, a data-value description-descriptor, and a data valuetype-descriptor. The groups of description value, collectively, may forma definition for each of the data-value in the message construct. Themetadata construct may precede the message construct in forming thebinary body.

In some implementations, a portion of the metadata construct and aportion of the message construct correspond to a set of charactersdefined by a universal standard code.

In some implementations, the binary header is unencrypted, and thebinary body is encrypted.

In one aspect, the present disclosure describes a method of using binaryDynamic REST message. The method may include storing, at a memory, afirst structural description of the binary header and the binary bodyand a second structural description of the metadata construct where themetadata construct comprises one or more groups of description valuescorresponding to a given data value of the one or more data valuesforming the message construct. Each of the one or more data values ofthe message construct and each of the one or more description value ofthe metadata construct may be delineated by a binary marker.

In some implementations, the method may include receiving, at a port, aplurality of binary data streams representing a plurality of messages.The binary data streams may be received via Web sockets.

In some implementations, the method may include parsing, using aprocessor, each of the received binary data streams using the firststructural description to determine the binary header and the binarybody. The binary header is unencrypted, and the binary body isencrypted.

In some implementations, the method may include parsing, using theprocessor, the parsed binary body using the second structuraldescription to determine the one or more groups of description valuesforming the metadata construct where the processor uses a portion of thedetermined description values of the metadata construct to determine theone or more groups of data values of the message construct. The metadataconstruct may include a data-value name descriptor, a data-valuedescription-descriptor, and a data value type-descriptor.

descriptor. The metadata construct may precede the message construct informing the binary body. A portion of the metadata construct and aportion of the message construct may correspond to a set of charactersdefined by a universal standard code.

In one aspect, the present disclosure describes a non-transitorycomputer readable medium having instructions stored thereon, where theinstructions, when executed by a processor, cause the processor tostore, at a memory, a first structural description of the binary headerand the binary body and a second structural description of the metadataconstruct where the metadata construct comprises one or more groups ofdescription values corresponding to a given data value of the one ormore data values forming the message construct. Each of the one or moredata values of the message construct and each of the one or moredescription value of the metadata construct may be delineated by abinary marker.

In some implementations, the instructions, when executed, further causethe processor to receive, at a port, a plurality of binary data streamsrepresenting a plurality of messages. The binary data streams may bereceived via Web sockets.

In some implementations, the instructions, when executed, further causethe processor to parse, using a processor, each of the received binarydata streams using the first structural description to determine thebinary header and the binary body. The binary header is unencrypted, andthe binary body is encrypted.

In some implementations, the instructions, when executed, further causethe processor to parse, using the processor, the parsed binary bodyusing the second structural description to determine the one or moregroups of description values forming the metadata construct where theprocessor uses a portion of the determined description values of themetadata construct to determine the one or more groups of data values ofthe message construct. The metadata construct may include a data-valuename descriptor, a data-value description-descriptor, and a data valuetype-descriptor. The metadata construct may precede the messageconstruct in forming the binary body. A portion of the metadataconstruct and a portion of the message construct may correspond to a setof characters defined by a universal standard code.

In one aspects, the present disclosure describes a communication devicehaving a memory for storing a structural description of a messagedefined by a self-describing schema, where the structural descriptiondescribes a structure interspersed by both one or more label elementsand one or more punctuation elements among the data objects to describea given message. The memory further stores a codebook having a set ofbinary symbols corresponding to the binary representations. Thecommunication device may include a processor configured to generate abinary data stream to transmit to another computer device via acommunication port. The processor may generate the binary data streamfrom a received message defined by the self-describing schema in whichthe received message may include one or more data objects delimited byone or more both label elements and one or more punctuation elements.The processor may parse the received message for one or more dataobjects according to the stored structural description. The processormay serially map each of the elements of a parsed data objects to abinary symbol defined in the codebook to produce a binary data streamwhere, when serially mapping each of the elements of the parsed dataobjects, the processor does not map the one or more label elements andone or more punctuation elements interspersed among the data objects into the binary data stream.

In another aspect, the present disclosure describes a communicationdevice including a port configured to transmit and receive a data streamvia a persistent stateless connection. the persistent statelessconnection may be over a web-socket connection.

In some implementations, the communication device may include a memorystoring a dynamic REST API model.

In some implementations, the communication device may include aprocessor configured to connect to a second communication device overthe persistent stateless connection. The processor formats a requestmessage with the stored dynamic REST API model to produce aself-describing request message. The dynamic REST API model may includea data model that includes a data object, an event object, a serviceobject, a property object, and an attribute object. The processor causesthe self-describing request message to be transmitted over the port. Theport may be a HTTP or HTTPS port having a value of 80 or 443. Theself-describing request message may be presented in at least one of aJavaScript Object Notation (JSON) object and an Extensible MarkupLanguage (XML) object. The self-describing request message may beformatted in a binary format. The self-describing request message may beencrypted.

In another aspect, the present disclosure describes a method of usingdynamic REST messages with Web sockets. The method may include storing,at a memory of a device, a binary dynamic REST API model.

In some implementations, the method may include formatting, via aprocessor at the device, a request message using the binary dynamic RESTAPI model to produce a self-describing request message.

In some implementations, the method may include transmitting, via a portof the device, the request message over a persistent state connection.The dynamic REST API model may include a data model that includes a dataobject, an event object, a service object, a property object, and anattribute object. The processor causes the self-describing requestmessage to be transmitted over the port. The port may be a HTTP or HTTPSport having a value of 80 or 443. The self-describing request messagemay be presented in at least one of a JavaScript Object Notation (JSON)object and an Extensible Markup Language (XML) object. Theself-describing request message may be formatted in a binary format. Theself-describing request message may be encrypted.

In another aspect, the present disclosure describes a non-transitorycomputer readable medium having instructions stored thereon, where theinstructions, when executed by a processor, cause the processor tostore, at a memory of a device, a binary dynamic REST API model.

In some implementations, the instructions, when executed, further causethe processor to format, via a processor at the device, a requestmessage using the binary dynamic REST API model to produce aself-describing request message.

In some implementations, the instructions, when executed, further causethe processor to transmit, via a port of the device, the request messageover a persistent state connection. The dynamic REST API model mayinclude a data model that includes a data object, an event object, aservice object, a property object, and an attribute object. Theprocessor causes the self-describing request message to be transmittedover the port. The port may be a HTTP or HTTPS port having a value of 80or 443. The self-describing request message may be presented in at leastone of a JavaScript Object Notation (JSON) object and an ExtensibleMarkup Language (XML) object. The self-describing request message may beformatted in a binary format. The self-describing request message may beencrypted.

In yet another aspect, the present disclosure describes a method ofabstracting a communication protocol using self-describing message. Themethod may include providing a first communication protocol and a secondcommunication protocol in a memory of a device where the firstcommunication protocol includes a number of control codes and binarymessages having a self-describing schema. The self-describing schema maybe of a data object model wherein instances of the second communicationprotocol are associatively mapped to the instances of the firstcommunication protocol. The associative mapping between the firstcommunication protocol and the second communication protocol may bestored in persistent memory.

In some implementations, the associative mapping of the control codesmay be based on a HTML framework.

In some implementations, the associate mapping of the data message maybe based on a service request selected from a group consisting of a GETrequest, a PUT request, a POST request, and a DELETE request.

The wireless connection may include a network selected from a groupconsisting of Zigbee, Bluetooth, WiMax, Wi-Fi, GSM, PCS, and D-AMPS,IEC, 6LoWPAN, Ant, DASH7, EnOcean, INSTEON, NeuRF ON, Senceive,WirelessHART, Contiki, TinyOS, GPRS, TCP/IP, CoAP, MQTT, TR-50, OMA LWM2M, ETSI M2M. The data object model may be structured in a dynamic RESTAPI object model.

In some implementations, the method may include receiving, at a port ofa computing device, a first instantiation of a message in the secondcommunication protocol. The message may be received via a wirelessconnection.

In some implementations, the method may include classifying, by aprocessor of the computing device, the first instantiation of themessage as being either a control message or a data messages.

In some implementations, the method may include translating, by aprocessor of the computing device, the first instantiation of themessage to produce a second instantiation of the message where upon themessage having been classified as a control message, the processor mapsthe control message to one or more control codes of the plurality ofcontrol codes and where upon the message having been classified as adata message, the processor maps the data message to a correspondingbinary message having the self-describing schema.

In some implementations, the method may include transmitting, at theport of the computing device, the second instantiation of the message.The first communication device may transmit the second instantiation ofthe message to the platform server over a web-socket connection.

In yet another aspect, the present disclosure describes a systemincluding a processor and a memory, the memory storing instruction that,when executed by the processor, cause the processor to provide a firstcommunication protocol and a second communication protocol in a memoryof a device where the first communication protocol includes a number ofcontrol codes and binary messages having a self-describing schema. Theself-describing schema may be of a data object model wherein instancesof the second communication protocol are associatively mapped to theinstances of the first communication protocol. The associative mappingbetween the first communication protocol and the second communicationprotocol may be stored in persistent memory.

In some implementations, the wireless connection may include a networkselected from a group consisting of Zigbee, Bluetooth, WiMax, Wi-Fi,GSM, PCS, and D-AMPS, IEC, 6LoWPAN, Ant, DASH7, EnOcean, INSTEON, NeuRFON, Senceive, WirelessHART, Contiki, TinyOS, GPRS, TCP/IP, CoAP, MQTT,TR-50, OMA LW M2M, ETSI M2M. The data object model may be structured ina dynamic REST API object model.

In some implementations, the associative mapping of the control codesmay be based on a HTML framework. In some implementations, the associatemapping of the data message may be based on a service request selectedfrom a group consisting of a GET request, a PUT request, a POST request,and a DELETE request.

In some implementations, the instructions, when executed, further causethe processor to receive, at a port of a computing device, a firstinstantiation of a message in the second communication protocol. Themessage may be received via a wireless connection.

In some implementations, the instructions, when executed, further causethe processor to classify the first instantiation of the message asbeing either a control message or a data messages.

In some implementations, the instructions, when executed, further causethe processor to translate the first instantiation of the message toproduce a second instantiation of the message where upon the messagehaving been classified as a control message, the processor maps thecontrol message to one or more control codes of the plurality of controlcodes and where upon the message having been classified as a datamessage, the processor maps the data message to a corresponding binarymessage having the self-describing schema.

In some implementations, the method may include transmitting, at theport of the computing device, the second instantiation of the message.The first communication device may transmit the second instantiation ofthe message to the platform server over a web-socket connection.

In yet another aspect, the present disclosure describes a non-transitorycomputer readable medium having instructions stored thereon, where theinstructions, when executed by a processor, cause the processor toprovide a first communication protocol and a second communicationprotocol in a memory of a device where the first communication protocolmay include a number of control codes and binary messages having aself-describing schema. The self-describing schema may be of a dataobject model wherein instances of the second communication protocol areassociatively mapped to the instances of the first communicationprotocol. The associative mapping between the first communicationprotocol and the second communication protocol may be stored inpersistent memory.

In some implementations, the wireless connection may include a networkselected from a group consisting of Zigbee, Bluetooth, WiMax, Wi-Fi,GSM, PCS, and D-AMPS, IEC, 6LoWPAN, Ant, DASH7, EnOcean, INSTEON, NeuRFON, Senceive, WirelessHART, Contiki, TinyOS, GPRS, TCP/IP, CoAP, MQTT,TR-50, OMA LW M2M, ETSI M2M. The data object model may be structured ina dynamic REST API object model.

In some implementations, the associative mapping of the control codesmay be based on a HTML framework. In some implementations, the associatemapping of the data message may be based on a service request selectedfrom a group consisting of a GET request, a PUT request, a POST request,and a DELETE request.

In some implementations, the instructions, when executed, further causethe processor to receive, at a port of a computing device, a firstinstantiation of a message in the second communication protocol. Themessage may be received via a wireless connection.

In some implementations, the instructions, when executed, further causethe processor to classify the first instantiation of the message asbeing either a control message or a data messages.

In some implementations, the instructions, when executed, further causethe processor to translate the first instantiation of the message toproduce a second instantiation of the message where upon the messagehaving been classified as a control message, the processor maps thecontrol message to one or more control codes of the plurality of controlcodes and where upon the message having been classified as a datamessage, the processor maps the data message to a corresponding binarymessage having the self-describing schema.

In some implementations, the method may include transmitting, at theport of the computing device, the second instantiation of the message.The first communication device may transmit the second instantiation ofthe message to the platform server over a web-socket connection.

In further yet another aspect, the present disclosure describes acommunication engine including a communication port configured toreceive one or more data streams, including a first data stream and asecond data stream, wherein the data stream comprises a binary dynamicREST messages. The data stream may include one or more data fields whereeach of the data fields include a field value and a length identifier ofthe field value, the length identifier preceding a corresponding fieldvalue in each of the data fields. The communication port may receive theone or more input data stream over a web-socket connection. The messagemay include a data object having an event object, a service object, aproperty object, and an attribute object. Each of the one or more inputdata streams may include an identifier of a number of one or more datastreams that form a given complete executable message. Each of the oneor more data streams may include a message number identifier thatindicate a location of a given decoded data stream within the completeexecutable message. Each of the one or more data streams may form aportion of a complete executable message.

In some implementations, the communication engine may include a firstbuffer to store a received first data stream and a received second datastream.

In some implementations, the communication engine may include a secondbuffer to store portions of a decoded message.

In some implementations, the communication engine may include aprocessor configured to decode the received data stream buffered withinthe first buffer to produce a given decoded portion. The processor maystore the given decoded portion to the second buffer where the processorinitiates decoding of the received first data stream buffered within thefirst buffer prior to a complete receipt of the received second datastream.

In some implementations, the communication engine may include a secondbuffer to store decoded portions of the one or more data streams havingbeen buffered in the first buffer where the processor transmits a signalwhen the second buffer comprises each of the one or more data streamsforming a given complete executable message.

In some implementations, the communication engine may include adecryption engine to decode an encrypted portion of the input datastreams, which is encrypted.

In further yet another aspect, the present disclosure describes a methodof using chunk-based communication of binary Dynamic REST message. Themethod may include receiving, at a port, one or more data streams,including a first data stream and a second data stream. The data streammay include one or more data fields where each of the data fieldsinclude a field value and a length identifier of the field value, thelength identifier preceding a corresponding field value in each of thedata fields. The communication port may receive the one or more inputdata stream over a web-socket connection. The message may include a dataobject having an event object, a service object, a property object, andan attribute object. Each of the one or more input data streams mayinclude an identifier of a number of one or more data streams that forma given complete executable message. Each of the one or more datastreams may include a message number identifier that indicate a locationof a given decoded data stream within the complete executable message.Each of the one or more data streams may form a portion of a completeexecutable message.

In some implementations, the method may include storing, at a firstbuffer, a received first data stream and a received second data stream.

In some implementations, the method may include storing, at a secondbuffer, portions of a decoded message.

In some implementations, the method may include decoding, using aprocessor, the received data stream buffered within the first buffer toproduce a given decoded portion. The processor initiates decoding of thereceived first data stream buffered within the first buffer prior to acomplete receipt of the received second data stream.

In further yet another aspect, the present disclosure describes anon-transitory computer readable medium having instructions storedthereon, where the instructions, when executed by a processor, cause theprocessor to receive, at a port, one or more data streams, including afirst data stream and a second data stream. The data stream may includeone or more data fields where each of the data fields include a fieldvalue and a length identifier of the field value, the length identifierpreceding a corresponding field value in each of the data fields. Thecommunication port may receive the one or more input data stream over aweb-socket connection. The message may include a data object having anevent object, a service object, a property object, and an attributeobject. Each of the one or more input data streams may include anidentifier of a number of one or more data streams that form a givencomplete executable message. Each of the one or more data streams mayinclude a message number identifier that indicate a location of a givendecoded data stream within the complete executable message. Each of theone or more data streams may form a portion of a complete executablemessage.

In some implementations, the instructions, when executed, further causethe processor to store, at a first buffer, a received first data streamand a received second data stream.

In some implementations, the instructions, when executed, further causethe processor to store, at a second buffer, portions of a decodedmessage.

In some implementations, the instructions, when executed, further causethe processor to decode, using a processor, the received data streambuffered within the first buffer to produce a given decoded portion. Theprocessor initiates decoding of the received first data stream bufferedwithin the first buffer prior to a complete receipt of the receivedsecond data stream.

BRIEF DESCRIPTION OF THE DRAWINGS

The foregoing and other objects, aspects, features, and advantages ofthe present disclosure will become more apparent and better understoodby referring to the following description taken in conjunction with theaccompanying drawings, in which:

FIG. 1 is a block diagram of an example system for enablingcommunication between a platform server and a plurality of computingdevices in accordance with an embodiment of the invention.

FIG. 2 is a block diagram of an example communication channel fortransmitting and receiving messages formatted according to an APIprotocol in accordance with an embodiment of the invention.

FIG. 3A is a block diagram of the API protocol library in accordancewith an embodiment of the invention.

FIG. 3B shows an example structure of message output of the binaryDynamic REST API component in accordance with an embodiment of theinvention.

FIG. 3C shows an example HTTP REST API codes utilized by the APIprotocol library in accordance with an embodiment of the invention.

FIG. 3D shows an example structure of a message header utilized by theAPI protocol library in accordance with an embodiment of the invention.

FIG. 3E is an example codebook of the API protocol library in accordancewith an embodiment of the invention.

FIGS. 3F-3G show example structures of multi-part headers utilized bythe API protocol library in accordance with an embodiment of theinvention.

FIG. 3H shows an example structure of an authentication body utilized bythe API protocol library in accordance with an embodiment of theinvention.

FIG. 3I shows an example structure of an binding and unbinding messagebody utilized by the API protocol library in accordance with anembodiment of the invention.

FIG. 4 is a block diagram of an example message transmission andreception using the API protocol library in accordance with anembodiment of the invention.

FIG. 5 is a block diagram of an example of a message transmission andreception using the API protocol library in accordance with analternative embodiment of the invention.

FIG. 6A illustrates an example encoded message generated by the binarydynamic REST API in accordance with an embodiment of the invention.

FIG. 6B illustrates the example REST message in a JavaScript ObjectNotation format.

FIGS. 7A-7C illustrate an example method of generating a serializedbinary Dynamic REST API message in accordance with an embodiment of theinvention.

FIG. 8 illustrates an example method of partitioning an encoded messagein accordance with an embodiment of the invention.

FIG. 9 is a flowchart of an example method of reassembling a message inaccordance with an embodiment of the invention.

FIG. 10 is a block diagram of an example computing device running aclient-application that is executing a software development kit (SDK)using the API protocol library in accordance with an embodiment of theinvention.

FIG. 11 is a block diagram of an example method of wrapping third partyprotocols using the API protocol library in accordance with anembodiment of the invention.

FIG. 12 is a flowchart of an example method for parsing aself-describing message in accordance with an embodiment of theinvention.

FIG. 13 is a flowchart of an example method of using Web Socket totransmit Dynamic REST messages in accordance with an embodiment of theinvention.

FIG. 14 is a flowchart of an example method of communication with athird party protocol in accordance with an embodiment of the invention.

FIG. 15 is a flowchart of an example method of communication usingchunked messages in accordance with an embodiment of the invention.

FIG. 16 is a block diagram of a computing device and a mobile computingdevice.

The features and advantages of the present disclosure will become moreapparent from the detailed description set forth below when taken inconjunction with the drawings, in which like reference charactersidentify corresponding elements throughout. In the drawings, likereference numbers generally indicate identical, functionally similar,and/or structurally similar elements.

DETAILED DESCRIPTION

FIG. 1 is a block diagram of an example system 100 for enablingcommunication between a platform server 102 and a plurality of computingdevices 104 in accordance with an embodiment of the invention. Each ofthe computing devices 104 connects to an edge server 106 that servicesand maintains communication with a group of computing devices 108.

A computing device 104, in some examples, is an electronic device thatcan communicate properties-, services-, and events-data and informationrelating a physical assets/devices, computer applications and systems,people, data objects, and platform services. In some implementations,the computing device 104 is a sensor or a machinery at an industrialcomplex; a computer or an office equipment at a business or governmentoffice; a point-of-sale machine at a market place or a vending machine;a construction equipment or a vehicle; a power generation ordistribution equipment; a power substation or a transmission equipment;a building meter; a server; a networking or routing equipment; a smartappliance; an exercise machine; a medical device or a prosthesis device;a medical diagnostic device or a hospital equipment; a commercialvehicle or a transport container; a motor vehicle or an electricbicycle; a cellphone, a laptop, a tablet, an electronic reader; or aclothing electronic-tag.

While serving data and information for sets of computing devices 104,one or more edge servers 106 communicate to an intermediary server,referred to as an API server 110 (or “connection server 110”). In someimplementation, the communication exchange occurs across a networkinfrastructure 112, such as the Internet 112 a, a Wide-area network 112b, or a third-party network 112 c. In turn, one or more API servers 110communicate to the platform server 102. The platform server 102, the APIservers 110, and the edge servers 106, collectively, form a distributedcomputing environment for serving data and information of the computingdevices 104. In some implementations, a given API server 110communicates to a set of edge servers 106 through a set of networksecurity equipment 114 that secures the API server 110 and the platformserver 102 from the network infrastructure 112 and that secures thegroups of edge servers 106 and computing devices 104. For example, thenetwork security equipment 114 may run a firewall or Network AddressTranslation (NAT) protocol.

FIG. 2 is a block diagram of an example communication channel 200 fortransmitting and receiving messages 202 formatted according to an APIprotocol in accordance with an embodiment of the invention. Thepersistent communication channels 200 generally refer to persistentconnections, such as the first persistent connection 103 and the secondpersistent connection 105, as described in relation to FIG. 1.

The platform server 102 runs a server-client application having an APIprotocol library 204 defining the API protocol. The edge server 106 runsa server-client application having the same API protocol library 204. Tothis end, messages being communicated between the platform server 102and the edge servers 106 share, for the most part, the same structure.In some implementations, the same API protocol is employed among all ofthe components within the distributed computing environment.

This symmetry is intended to reduce the complexity of operation of theconnection server 110 as the connection server 110 can service eachcommunicated message in the same manner without much regard to thesource or target.

The API protocol library 204 operates with a number of server-clientapplication functions that dynamically generates application interfacesfor servicing data and information. In some implementation, theapplication interface is based on a Dynamic REST API that generatesbinary message. In other implementations, the interface is based onJavaScript Object Notation (“JSON”) or Extensive Markup Language (“XML”)data formatting. Examples of usage of Dynamic REST APIs in a model-baseddevelopment application is described in U.S. patent application Ser. No.13/678,885, titled “METHODS FOR DYNAMICALLY GENERATING APPLICATIONINTERFACES FOR MODELED ENTITIES AND DEVICES THEREOF,” filed Nov. 16,2012. The application is incorporated by reference in its entirety.

FIG. 3A is a block diagram of the API protocol library 204 in accordancewith an embodiment of the invention. The API protocol library 204includes a binary Dynamic-REST API component 302 and a fixed-HTTP RESTAPI component 304.

The Dynamic REST API 302 employs a model-based schema to describe dataand information in which the inputs and outputs of the schema isexpressed in a self-describing textual data format, such as JSON or XML.The application interface is “dynamic” in that data and information arerepresented in an evolving and modify-able framework. Specifically, theapplication interface employs a series of characteristic definitions todescribe types of information relating to a given entity, such as aphysical asset/device, a computer application/system, a person, a dataobject, or a platform service.

In some implementations, the binary Dynamic REST API component 302outputs serialized binary data representing data- andinformational-models.

In some implementations, these characteristic definitions include a“property” definition 303 a, a “service” definition 303 b, an “event”definition 303 c and an “attribute” definition 303 d. Each of thesecharacteristic definitions serves as an elementary building block indescribing a model of the entity and is expressed as an abstract classthat can inherit one or more classes, abstract classes, and datastructures. The characteristic definitions are organized, collectively,in a template class with other characteristic definitions. To this end,a developer of applications to service data and information of acomputing device may model an entity (also referred to as a “Thing”)that represents a physical-world equivalent containing the complete setof data, services, events, historical activities, collaboration,relationships that define a Thing and its place in the organizationallandscape.

In some implementations, a “Thing” is defined as an instance of a “ThingTemplate.” A “Thing Template” is also an abstract class that can inheritfrom one or more “Thing Shapes.” Properties, services, and events can bedefined at the “Thing Shape”, “Thing Template” or “Thing instance.” If a“Thing Template” inherits from one or more “Thing Shapes”, all of theproperties, events, and services of the “Thing Shapes” are a part of the“Thing Template.” When a “Thing instance” is created from a “ThingTemplate”, all of the properties, events, and services of the “ThingTemplate” are realized within the “Thing instance.”

In some implementations, data objects may be represented as “InfoTables”and “Streams.” “InfoTables” and “Streams” may be beneficially describedand defined by “DataShapes 305,” which are reusable, abstract dataobject definitions. An “InfoTable” is similar to a relational databasetable, which represents a two dimensional data object (having columnsand rows). A “Stream” is designed to capture time series data. Timeseries data is the data that is most often found as part of thecommunication flow for devices and machines. “Streams” and “InfoTables”also have services and events.

All of the entities can, based on authorizations, subscribe to any otherentities events and can consume other entity services. When an entity isdefined, it is immediately discoverable through a standardRepresentational State Transfer (REST) interface over HTTP or HTTPS.Therefore, the complete model namespace is available over a dynamic RESTinterface. Whatever a user defines the model to be appears as a RESTinterface. The REST interface for the model also includes a fulldescription of the properties, services, and events for each entity. Aservice is a simple or complex function provided on a server, which isaccessible to a State Representational State Transfer (REST) interface.A service has inputs, processing, and outputs. An event is a simple orcomplex change of data and/or status of an entity. An event has awell-defined complex data output that is sent to each event subscriberwhen the event is detected.

The dynamic REST interface is based on an inheritance or object orientedmodel. If a new service, property, or capability is defined at the“Thing Shape” or “Thing Template” level, each “Thing” instance that isderived from those entities immediately inherits that service, propertyor capability. The Dynamic REST API 302 employs this dynamic RESTinterface.

The REST interface for the namespace describes how to consume servicesfor each entity in the model. As soon as a new “Thing” is defined in themodel, the full set of services and data for the “Thing” is available asa set of REST interfaces.

FIG. 3B shows an example structure of message output of the binaryDynamic REST API component 302 in accordance with an embodiment of theinvention.

A message generated from the binary Dynamic REST API may include ametadata construct and a message construct. The metadata constructdescribes a given structure of the message construct. Collectively, insome implementations, the metadata construct 306 and a message construct308 forms a message body 307.

The message construct may include the actual data sets that aserver-client application intends to transmit. In some implementations,these data sets are referred to as “Row Data 308”. The datasets mayinclude one or more data values 310. The metadata construct 306 mayinclude one or more description sets 312 corresponding to a given datavalue forming the data set. The description sets 312 may include one ormore description values 314. In some implementations, the metadataconstruct 306 is referred to as a “Datashape 306” where each of thedescription sets 312 forms a given field definition of the Datashape.Examples of field definitions may include a name, description, type, andaspects. These definitions describe a given data 316 in the Row Data310.

In some implementations, the message generated from the binary DynamicREST API preferably includes a first type of binary markers 318 todelineate each of the data sets 310 and each of the description sets312. These binary markers 318 may mark the beginning of the data setsand the description sets. Additionally, each of the metadata constructand the message construct may include a second binary marker 320 to markthe end of the metadata construct 306 and the message construct 308.

In some implementation, each of the data sets 310 and the descriptionsets 312 may include a data expressed as character strings 322, numbers324, and enumerations 326. Character strings are text data. Numbers mayinclude floating and fixed point numbers. Enumeration generally includesdata types. Each character strings 322 may include a length-descriptionfield preceding the actual string value to provide a forward descriptorof the content. To this end, a given character string 322 in encodedform may be parsed without the complete character string 322 beingavailable. To this end, groups of unknown data may include a count field328 to identifier the number of such data to follow.

To reduce the memory requirement for the protocol, in someimplementations, the protocol encodes a first portion set of a messageusing binary representations defined as symbols stored in a codebooklibrary. In some implementations, the binary representation includesbyte enumerations.

The protocol may convert a second portion set of the message usingstandard data formats that are native to a given computing device.Examples of such standard data formats may include the Unicodecharacters, such as UTF-8.

The message may be formatted as a binary string optimized fortransmission using a WebSocket protocol.

Turning back to FIG. 3A, the HTTP REST API 304 may includemessaging-type definition codes 330 and status codes 332 derived fromthe HTTP framework as defined the Hypertext Transfer Protocolapplication protocol version 1.1 (commonly referred to as “HTTP/1.1” or“HTTP”) and published in IETF/W3C RFC 2616. The HTTP REST API codes areprovided in FIG. 3C. Examples of status codes 332 include success code332 a, client error codes 332 b, and server error codes 332 c. Examplesof messaging-type definition codes 330 include those related to devicebinding, authentication, and request messaging.

In some implementations, the messaging-type definition codes 330 andstatus codes 332 may be a part of a message header 338 having routinginformation for the message. An example of the structure of the messageheader is shown in FIG. 3D. In some implementations, the message header338 may include a header identification number 340, routing information342 (such as request identification number 342 a, session number 342 b,and endpoint identification number 342 c), and method codes 344. Themethod codes 344 may be used to specify the type of message located inthe message content. The message header 338 may include a multipartmarker 346 to indicate the message being a part of a collection ofmessages in which all of the data content of these messages form asingle message.

Turning back to FIG. 3A, in some implementations, the API protocollibrary 204 may include a message partitioning module 334 for segmentinga given message into a fixed size for transport. The segmenting mayfacilitate the transmission of large messages using a small fixed memoryusage for each of the connection. The message partitioning module 334may chunk or partition a given message and reassemble them at theapplication level rather than at the transport level.

The API protocol library 204 may inject metadata, such as thelength-description field for character strings 322 or the count fields328, as described in relation to FIG. 3B, to allow parsing of a givenmessage content without the complete message. That is, the metadatadescribes the content that is to follow. Using the message partitioningmodule 334, a given message generated by the binary Dynamic REST API 302may be partitioned into chunks where each of the chunks may be decodedprior to the complete message is received.

To this end, a message of any length may be decoded using a buffer ofonly two message lengths for the decoding. In some implementation, theserver-client side application may employ a fixed-buffer preferablybetween 1Kbytes and 1 MBytes buffer, even more preferably between4Kbytes and 64Kbytes, even more preferably between 4Kbytes and 8Kbytes.

An example of the structure of the message multipart header is shown inFIGS. 3F and 3G. As shown in the figure, the message multipart header348 may include a current chunk identification number 350 a, a totalchunk number 350 b, and a chunk size identifier 350 c. The messagemultipart header 348 may be inserted between the header 338 and themessage body 339.

In some implementations, the API protocol library 204 may employdifferent message structures depending on the direction of message flow.For example, for an inbound message from a client-side application tothe server-side application, the routing information 342 d may bereproduced in the multi-part message header 348 to provide thedestination information.

Turning back to FIG. 3A, in some implementation, the API protocollibrary 204 may be used in conjunction with the WebSocket API 336 tocommunicate the output message of the API protocol library 204 viaWebSocket. WebSocket API 336 may be employed to stream messages on topof the Transmission Control Protocol (TCP). In some implementation, theWebSocket API 336 is a part of HTML5 WebSocket protocol. The messageoutput of the API protocol library 204 may be configured to be entirelybinary to further improve communication over the WebSocket API 336.

FIG. 4 is a block diagram of an example message transmission andreception using the API protocol library 204 in accordance with anembodiment of the invention. A client-server application 400 a may calla function to transmit a message to another client-server application400 b. The call function may be a part of the API protocol library 204.

In some implementations, the binary Dynamic REST API 302 outputs aserialized binary stream corresponding to a self-described message.

FIG. 6A illustrates an example encoded message 402 generated by thebinary dynamic REST API 302 in accordance with an embodiment of theinvention. FIG. 6B illustrates the example encoded message 602 of FIG.6A represented in a JavaScript Object Notation (JSON) format.

To this end, the example shows a reduction of over 50 percent of themessage length compared to a JSON format message of the same messagecontent. A typical JSON message is organized having an attribute-valuepair delimited by colons “:” in which the pair values may be anothernest attribute-value pair delimited by an open bracket “{” and a closedbracket “}”. The attribute-value pair format provides a flexible schemato describe a message.

To improve the information efficiency of a given message, the binarydynamic REST API 302 may generate the message 402 with only the dataobject. The binary dynamic REST API 302 may store a structuraldescription of the description values 314 that form the metadataconstruct 312, namely the DataShape 312. The description values 314, inturn, may provide a definition for the data values 316, namely the RowData 316 in the message construct 310. In some implementations, thebinary dynamic REST API 302 may inject a first binary markers 318 tomark the beginning of the data sets 310 the description sets 312 and asecond binary marker 320 to mark the end of the metadata construct 306and the message construct 308. To this end, the various punctuation andlabel elements such as those associated with JSON-base message may notbe necessary to include.

FIGS. 7A-7C illustrate an example method of generating a serializedbinary Dynamic REST API message in accordance with an embodiment of theinvention.

Specifically, FIGS. 7A and 7B show examples of generating a metadataportion of a message in accordance with an embodiment of the invention.FIG. 7C shows an example of generating the data portion of the messagein accordance with an embodiment of the invention.

Turning now to FIG. 7A, the message structure of the metadata portion702 is shown along with a marked-up 704 of the JSON message shown inFIG. 6B. The JSON message shows a self-describing message having ametadata construct and a message construct.

The metadata portion may include one or more field definitionscorresponding to the “Datashape” 312, as described in relation to FIG.3B. As indicated, each of the field definitions includes a marker field712, a name field 714, a description field 716, a type field 718, anaspect count field 720, and an aspect field 722.

A given message construct may include groups of data values to which agiven metadata construct may include one or more groups of descriptionvalues that describes this group of data value. As described in relationto FIG. 3B, the message construct may refer to the “Row Data” (shown inthe example as “rows” 724), and the metadata construct may refer to the“DataShape” (shown in the example as “datashape” 726).

As shown, the “datashape” 726 includes three field-definitions. Encodingof two of the three field-definitions (“pushThreshold” 728 and “pushType” 732) are discussed in FIG. 7A, and the third threefield-definition (“edge Name” 730) is discussed in FIG. 7B.

As shown, each of the field definitions 728, 730, and 732 includes agroup of description values 734 common to each other, namely “name”,“description”, “baseType”, and “aspects”. These description values areexample implementations of a type of the characteristic definitions thatmay collectively form a template class of the model-based schema used bythe dynamic REST API 302, as described in relation to FIG. 2.

As shown, each of the group of definitions has an “attribute”-“value”pair, as is the style of the JSON format. In encoding the message, onlythe “value” portion of the pair is used. The attribute is stored as partof a structural definition of the model-based schema that isincorporated into the binary dynamic REST API 302.

To generate a binary message of this JSON example message 602, in someimplementations, a marker value is first added to the binary message. Asdiscussed in relation to FIG. 3B, a marker 712 delineates each of thedata sets (such as the “row data”) of the message construct and each ofthe description sets (such as the “field definitions”) of the metadataconstruct. The marker marks the beginning of the data sets and thedescription sets. Additionally, a second type of marker marks the end ofthe metadata construct and the message construct. In someimplementations, the marker value may be a single digit binary value(i.e., “1” or “0”).

In some implementations, a “name” value 736, a “description” value 738,a “baseType” value 740, and an “aspect” value 742 may follow the marker712.

The “name” value 736 may be expressed as a character string. In thebinary message, a given character string may be defined by a lengthidentifier 744 that precedes the value 746 of the character string,which is expressed in UTF-8 format (Unicode standard). As shown, thecharacter string “pushThreshold” has a length of “13” characters (whichcan be represented in hexadecimal code as “0x0d”) and has a data value(in hexadecimal code) of “0x70 0x75 0x73 0x68 0x54 0x68 0x72 0x65 0x730x68 0x6f 0x6c 0x64” when expressed in UTF-8. This conversion isannotated in box 748. To this end, the hexadecimal value “0x0d 0x70 0x750x73 0x68 0x54 0x68 0x72 0x65 0x73 0x68 0x6f 0x6c 0x64” is appended tothe binary message.

As shown, the “description” value 738 is a character string having “39”characters (hexadecimal code “0x57”). In UTF-8, the character string“Change threshold to generate event for numeric properties” isexpressed, in hex-value, as:

-   -   0x43 0x68 0x61 0x6e 0x67 0x65 0x20 0x74 0x68 0x72 0x65 0x73 0x68        0x6f 0x6c 0x64 0x20 0x74 0x6f 0x20 0x67 0x65 0x6e 0x65 0x72 0x61        0x74 0x65 0x20 0x65 0x76 0x65 0x6e 0x74 0x20 0x66 0x6f 0x72 0x20        0x6e 0x75 0x6d 0x65 0x72 0x69 0x63 0x20 0x70 0x72 0x6f 0x70 0x65        0x72 0x74 0x69 0x65 0x73.

As shown, the “baseType” value 740 is represented as a type of dataformat. In some implementations, the data format information ispreferably expressed as a binary symbol that is defined in a codebookcomposing a portion the API protocol library 204. FIG. 3E is an examplecodebook of the API protocol library 204 in accordance with anembodiment of the invention. In some implementations, the binary symbolis preferably 8 bits long. This conversion is annotated in box 752.

As shown, the “aspects” value 742 is a number. In some implementations,the “aspects” value is a two byte SHORT (i.e., having two bytes, eachbeing 4 bits in length). Here, the value is NULL or EMPTY and isexpressed, in hex-value, as “0x00 0x00.” This conversion is annotated inbox 754.

In some implementations, this process of appending binaryrepresentations of the group of definitions to form the metadataconstruct is repeated for the entirety of the message 602. To this end,the various data-values of the “edge Name” and “pushType”field-definitions are appended to the binary message. The values ofthese data-values are provided in annotated box (756, 758, 760, 762,764, 766, 768, and 770). In some implementations, an end marker (e.g.,code “0x00”) follows the data-values to delineate the end of the messageconstruct. In some implementations, the sequencing of thefield-definitions in the binary message is not relevant as each of thefield-definitions is described as its “name” value.

Referring to FIG. 7B, in some implementations, a group of aspect valuemay be nested within the group of data-values. The aspect count field720 may define number of such groups. In some implementations, each ofthe aspect groups may include an “aspect name” value 772, an “aspecttype” value 774, and an “aspect data” value 776. Encoding of a givenaspect-group may be similar to encoding of the other group in which, forexample, character strings are preceded by a length identifier, and datatypes are expressed as binary symbols. In some implementations, the“aspect name” value is a character string; the “aspect type” value is adata type; and the “aspect data” value is a value having a formatdescribed by the “aspect type” value.

Referring now to FIG. 7C, encoding of the message construct of theexample message 602 is described. As discussed in relation to FIG. 3B,the metadata construct describes a given structure of the messageconstruct. To this end, in some implementations, each of the Row Data316 of the message construct may be described by the description values314 enunciated in the metadata construct.

As shown, the metadata construct includes three field definitions,namely a “pushThreshold” field definition 728, an “edge Name” fielddefinition 730, and a “pushType” field-definition 732. To this end, the“Row Data” (778, 780, 782, 784, and 786) is preferably structuredaccording to these field definitions 728, 730, 732.

In some implementations, a “Row Data” may include a marker 712, arow-count field 788, and a number of data groups 790 corresponding tothe number of row-count field 788. Each of the data groups 790 mayinclude a data type field 792 and a value field 794.

As shown, “Row Data” 778 includes a “pushThreshold” value “100000”, an“edge Name” value “InMemory_String”, and a “pushType” value “NEVER”.

As defined by the “pushThreshold” field-definition 728, the value“100000” is a “NUMBER.” In some implementations, a number is expressedas an 8-byte DOUBLE. To this end, the value “100000” is equivalent tohex-value “0x40 0f8 0x6a 0xa0 0x00 0x00 0x00 0x00”, as is shown in box796.

The “edge Name” and “pushType” data are character strings, as defined bytheir respective field-definitions 730 and 732, and may be encoded inthe manner described above.

In some implementations, binary representations of the Row Data areappended to form the message construct for the entirety of the message602.

Of course, other means of generating a binary Dynamic REST message maybe employed.

Turning back now to FIG. 4, subsequent to the binary Dynamic REST API302 generating the serialized binary stream, the message partitioningmodule 334 of the API protocol library 204, as described in relation toFIG. 3A, may partition the encoded message 402 into a number of chunkedmessages 406.

The segmenting may facilitate the transmission of large messages using asmall fixed memory usage of each of the connection. In someimplementations, the message partitioning module 334 may chunk orpartition a given message and reassemble them at the application levelrather than at the transport level.

Moreover, the API protocol library 204 may inject metadata, such as thelength-description field for character strings 322 or the count fields328, to allow parsing of a given message content without the completecontent object. To this end, a given message generated by the binaryDynamic REST API 302 may be partitioned into chunks where each of thechunks may be decoded prior to the complete message is received.

FIG. 8 illustrates an example method of partitioning an encoded messagein accordance with an embodiment of the invention. The messagepartitioning module 334 may partition the encoded message 402 into anumber of chunked message 406. In some implementations, the length ofthe message may be fixed or variable.

In some implementations, the message partitioning module 334 may injectmetadata information relating to the partitioning into a header, suchas, for example, the multipart header. FIGS. 3F-3G show examplestructures of multi-part headers utilized by the API protocol library204 in accordance with an embodiment of the invention. In someimplementations, the multi-part header may include a chunk-messageidentification number 350 a, a total number of chunks 350 b forming themessage, and a chunk size 350 c of a given chunked message. To this end,the message may be decoded in any order as the identification numberallows for assembly of the chunks in any sequence. Moreover, the totalnumber of chunk message allows the assembler to know the end of themessage based on the number of chunks received. Moreover, the chunk sizeallows the chunked messages to be of variable length as defined by thesize identifier.

In certain implementations, routing information 342 d (see FIG. 3D) maybe included in the multi-part message 348 to assist with the routing ofthe message, such as for outbound messages being transmitted from theplatform server 102. The other implementations, the routing informationmay be included for inbound messages.

In some implementations, the message partitioning module 334 includes abuffer window having a size preferably between 4 Kbytes and 1024 Kbytes,even more preferably between 8 Kbytes and 16 Kbytes. For large files804, the binary Dynamic REST API 302 may employ an external filetransfer protocol that may operate independently of the binary DynamicREST API 302 to transact the data exchange.

Turning back now to FIG. 4, subsequent to the message partitioningmodule 334 partitioning the encoded message 402 into one or more chunkedmessages 406, the API protocol library 204 packages the chunked message406 with metadata information about the message in the message's header338 and message's body 304 of the message.

The API protocol library 204 may add identity and target metadatainformation to the message's header and the message's body. The APIprotocol library 204 may encrypt the message using an encryption module410 a defined, in some implementations, within the API protocol library204. The encrypted portion may include the entire message or a portionof the message.

Examples implementations that employ metadata information in themessage's header and body is described in co-pending, concurrently filedU.S. patent application, titled “SYSTEM AND METHOD OF MESSAGE ROUTINGUSING NAME-BASED IDENTIFIER IN A DISTRIBUTED COMPUTING ENVIRONMENT”,filed Mar. 21, 2014, naming inventors Rick Bullotta, John Canosa, BobDeRemer, and Mike Mahoney, and having attorney docket no. 2009132-0032.The application is incorporated by reference herein in its entirety.

FIG. 3D shows an example structure of a message header utilized by theAPI protocol library 204 in accordance with an embodiment of theinvention. In some implementations, the header 338 may include a requestidentification number 342 a that is associated to a given message. Insome implementations, the request identification number 342 a ispreferably a 24-digit long binary number with the most-significant digit(MSB) first, though it can be of various data length and endian.

In some implementations, the header 338 may include a sessionidentification number 342 b that is associated to a given nameidentifier belonging to a particular computing device 104. In someimplementations, the session identification number 342 b may be used bya given connection server 110 to determine binding path of a givencomputing device 104. In some implementations, the sessionidentification number 342 b is preferably a 32-digit long binary numberwith the most-significant digit (MSB) first, though it can be of variousdata length and endian.

In some implementations, the header 338 may include an endpointidentification number 342 c that is associated to routing informationfor a given persistent connection 200. The endpoint identificationnumber 342 c is preferably a 32-digit long binary number with themost-significant digit (MSB) first.

In some implementations, the header 338 may include a message type field344, referred to as a “Method code 344.” For request type messages, themessage type field 344 may include a code corresponding to the requesttype message. In some implementations, the request type message may bebased on an HTTP framework and, thus, may include a “GET” request, a“POST” request, a “PUT” request, or a “DELETE” request.

In some implementation, the metadata information may include an “entityname” 342 d (corresponding to the source of the data or request), a“characteristic” field 342 e, a “target name” 342 f (corresponding to anintended recipient of the data or request), and a number of messagecount 342 g.

In some implementations, the API protocol library 204 may generatemessage produced from the multiple binary Dynamic REST API 302.

Turning back now to FIG. 4, in some implementations, the client- orserver-side application may employ a WebSocket protocol to transmit theoutput message 202 of the API protocol library 204 to a correspondingclient- or server-side application. The corresponding client- orserver-side application may be running a mirroring API protocol library204 to decode the message.

To decode the received message 202, the encrypted portion of thereceived message 202 may be decrypted via a decryption module 410 b. Asindicated, the encrypted portion may include the entire message or aportion of the message. The decryption module 410 b may return adecrypted message having the header 338 and the chunked message 406.

The API protocol library 204 may receive the header 338 and parse themethod code field 334 of the header 338 to determine the type ofmessage. In certain instances in which the method code field 334includes a HTTP request code 330, the API protocol library 204 may sendthe message body for further processing.

To decode a request message, in some implementations, the API protocollibrary 204 processor may parse the chunked message 406 using markeridentifiers, length identifier, field type identifier, and field countsidentifier to retrieve the group of field definitions and messageconstruct may include groups of data values. In some implementations inwhich all of the information needed to parse a given encoded portion ofthe message immediately precedes the encoded data, the API protocollibrary 204 may parse the message in portions (or chunks) without havingto wait for the entirety of the message. In instances in which themessage was chunked, the partial decoded message is stored in a buffer418. Upon the message being decoded in its entirety, the API protocollibrary 204 may signal the buffer 418 or the client-server applicationto retrieve the complete message to be serviced by the client-serverapplication 401 b.

To perform the decoding in its entirety, the first encoded data streammay be organized with a known DataShape and may include metadata todescribe unrestrictive elements within the data stream. In someimplementations, the metadata may include forward descriptors of anunrestrictive element. Unrestrictive element may include objects havingvariable number of elements. This can include textual information, suchas strings of text as well as variable numbers of objects. Unrestrictiveelement may also include the variable number of chunked message portionsthat constitute the entire message. The metadata may include markers toidentify separations between the various DataShape.

In being able to decode partial messages independent of one another, theclient-side application may be implemented as a light-weightapplication. A small-fixed decoding buffer typically reduces the cost ofimplementation for a given device.

FIG. 9 is a flowchart of an example method 900 of reassembling a message404 in accordance with an embodiment of the invention. The edge server106 may receive a first encoded data stream 902 (which is a part of themessage 404) and decodes the stream 902 in its entirety. The edge server106 may index the decoded portion of the message with an identifier 904corresponding to the number of chunked messages. The identifier 904 maybe the current chunk identification number 405 a employed in themultipart header 405 (see FIGS. 3F and 3G).

The edge server 106 may continue to receives the subsequent encoded datastreams 906, 908, and 910. The edge server 106 continues to index thedecoded portions 906, 908, and 910 of the messages 404 in the memory.

If a message chunk 912 was corrupted or not received, the edge server106 may wait for a retransmission of the missing chunk message 1112.Using the chunk identifier 1104, the edge server 106 can decode a givenreceived encoded data stream out of its sequence from with the message404.

Alternatively, the API protocol library 204 may be employed as anencoder or decoder. FIG. 5 is a block diagram of an example of a messagetransmission and reception using the API protocol library 204 inaccordance with an alternative embodiment of the invention. In thisembodiment, a client- or server-side application sends a message 402 tothe API protocol library 204. The message 402 may be formatted in ahuman-readable text-language format. Examples include, for example, JSONand XML. The message 402 may include data objects delimited by one ormore data objects.

The binary Dynamic REST API 302 may parse through the message 402 toretrieve one or more data objects according to the stored structuraldescription, as shown and described in FIGS. 7A to 7C. The binaryDynamic REST API 302 may serially map each of the elements of a parseddata objects to a binary symbol that is defined in the codebook toproduce a binary data stream.

FIG. 10 is a block diagram of an example computing device 104 running aclient-application that is executing a software development kit (SDK)using the API protocol library 204. The SDK preferably resides on lessthan 75 Kbytes of flash memory 1002. In some implementation, the SDK mayinclude the application and the protocol implementation, including anencryption mechanism.

FIG. 11 is a flowchart of an example method of communication acrossmultiple communication protocols. The method may be performed, forexample, by a software application cooperation with the API protocollibrary 204 executed upon the API server 110.

The API protocol library 204 provides a dynamic REST API interface thatflexibly interoperate with other communication protocol.

In some implementations, the method may be performed at the API servers110. To this end, legacy sensors and computing devices may be upgradedin the context of communication and controls.

FIG. 12 is a flowchart of an example method 1200 for parsing aself-describing message in accordance with an embodiment of theinvention. The method may include storing, at a memory, a firststructural description of the binary header and the binary body (step1202) and a second structural description of the metadata constructwherein the metadata construct comprises one or more groups ofdescription values corresponding to a given data value of the one ormore data values forming the message construct (step 1204). Thedescription values may include a data-value name descriptor, adata-value description-descriptor, and a data value type-descriptor.

In some implementations, the method 1200 include receiving, at a port, aplurality of binary data streams representing a plurality of messages(step 1206).

In some implementations, the method 1200 include parsing, using aprocessor, each of the plurality of received binary data stream usingthe first structural description to determine the binary header and thebinary body (step 1208).

In some implementations, the method may include parsing, using theprocessor, the parsed binary body using the second structuraldescription to determine the one or more groups of description valuesforming the metadata construct where the processor uses a portion of thedetermined description values of the metadata construct to determine theone or more groups of data values of the message construct (step 1210).Each of the one or more data values of the message construct and each ofthe one or more description value of the metadata construct may bedelineated by a binary marker.

FIG. 13 is a flowchart of an example method 1300 of using Web Socket totransmit Dynamic REST messages in accordance with an embodiment of theinvention.

In some implementations, the method 1300 may include storing, at amemory of a device, a binary dynamic REST API model (step 1302). Thedynamic REST API model may include a data model that includes a dataobject, an event object, a service object, a property object, and anattribute object.

In some implementations, the method 1300 may include formatting, via aprocessor at the device, a request message using the binary dynamic RESTAPI model to produce a self-describing request message (step 1304).

In some implementations, the method 1300 may include transmitting, via aport of the device, the request message over a persistent stateconnection (step 1306). The persistent stateless connection may be overa Web socket connection using a HTTP or HTTPS port.

FIG. 14 is a flowchart of an example method 1400 of communication with athird party protocol in accordance with an embodiment of the invention.The method 1400 may include providing a first communication protocol anda second communication protocol in a memory of a device wherein thefirst communication protocol may include a plurality of control codesand binary messages having a self-describing schema. The self-describingschema may be a data object model. In some implementations, instances ofthe second communication protocol may be associatively mapped to theinstances of the first communication protocol (step 1402). The datamodel may be structured in a dynamic REST API object model. Theassociative mapping of the control codes may be based on a HTMLframework.

In some implementations, the method 1400 may include receiving, at aport of a computing device, a first instantiation of a message in thesecond communication protocol (1404).

In some implementations, the method 1400 may include classifying, by aprocessor of the computing device, the first instantiation of themessage as being either a control message or a data message. The method1400 then may include translating, by a processor of the computingdevice, the first instantiation of the message to produce a secondinstantiation of the message (step 1406). If the message has beenclassified as a control message, the processor may map the controlmessage to one or more control codes. If the message has been classifiedas a data message, the processor may map the data message to a binarymessage having the self-describing schema, as described in relation toFIG. 7.

In some implementations, the method 1400 may include transmitting, atthe port of the computing device, the second instantiation of themessage (step 1406).

FIG. 15 is a flowchart of an example method 1500 of communication usingchunked messages in accordance with an embodiment of the invention.

In some implementations, The method may include receiving, at a port,one or more data streams among a plurality of data streams, including afirst data stream and a second data stream (1502).

In some implementations, the method 1500 may include storing, at a firstbuffer, a received first data stream and a received second data stream(step 1504).

In some implementations, the method 1500 may include storing, at asecond buffer, portions of a decoded message (step 1506).

In some implementations, the method 1500 may include decoding, using aprocessor, the received data stream buffered within the first buffer toproduce a given decoded portion. The processor may store the givendecoded portion to the second buffer where the processor initiatesdecoding of the received first data stream buffered within the firstbuffer prior to a complete receipt of the received second data stream.

FIG. 16 shows an example of a computing device 1600 and a mobilecomputing device 1650 that can be used to implement the techniquesdescribed in this disclosure. The computing device 1600 is intended torepresent various forms of digital computers, such as laptops, desktops,workstations, personal digital assistants, servers, blade servers,mainframes, and other appropriate computers. The mobile computing device1650 is intended to represent various forms of mobile devices, such aspersonal digital assistants, cellular telephones, smart-phones, andother similar computing devices. The components shown here, theirconnections and relationships, and their functions, are meant to beexamples only, and are not meant to be limiting.

The computing device 1600 may include a processor 1602, a memory 1604, astorage device 1606, a high-speed interface 1608 connecting to thememory 1604 and multiple high-speed expansion ports 1610, and alow-speed interface 1612 connecting to a low-speed expansion port 1614and the storage device 1606. Each of the processor 1602, the memory1604, the storage device 1604, the high-speed interface 1608, thehigh-speed expansion ports 1610, and the low-speed interface 1612, areinterconnected using various busses, and may be mounted on a commonmotherboard or in other manners as appropriate. The processor 1602 canprocess instructions for execution within the computing device 1600,including instructions stored in the memory 1604 or on the storagedevice 1606 to display graphical information for a GUI on an externalinput/output device, such as a display 816 coupled to the high-speedinterface 1608. In other implementations, multiple processors and/ormultiple buses may be used, as appropriate, along with multiple memoriesand types of memory. Also, multiple computing devices may be connected,with each of the device providing portions of the necessary operations(e.g., as a server bank, a group of blade servers, or a multi-processorsystem).

The memory 1604 stores information within the computing device 1600. Insome implementations, the memory 1604 is a volatile memory unit orunits. In some implementations, the memory 1604 is a non-volatile memoryunit or units. The memory 1604 may also be another form ofcomputer-readable medium, such as a magnetic or optical disk.

The storage device 1606 is capable of providing mass storage for thecomputing device 1600. In some implementations, the storage device 1606may be or contain a computer-readable medium, such as a floppy diskdevice, a hard disk device, an optical disk device, or a tape device, aflash memory or other similar solid state memory device, or an array ofdevices, including devices in a storage area network or otherconfigurations. Instructions can be stored in an information carrier.The instructions, when executed by one or more processing devices (forexample, processor 1602), perform one or more methods, such as thosedescribed above. The instructions can also be stored by one or morestorage devices such as computer- or machine-readable mediums (forexample, the memory 1604, the storage device 1606, or memory on theprocessor 1602).

The high-speed interface 1608 manages bandwidth-intensive operations forthe computing device 1600, while the low-speed interface 1612 manageslower bandwidth-intensive operations. Such allocation of functions is anexample only. In some implementations, the high-speed interface 1608 iscoupled to the memory 1604, the display 1616 (e.g., through a graphicsprocessor or accelerator), and to the high-speed expansion ports 1610,which may accept various expansion cards (not shown). In theimplementation, the low-speed interface 1612 is coupled to the storagedevice 806 and the low-speed expansion port 1614. The low-speedexpansion port 1614, which may include various communication ports(e.g., USB, Bluetooth®, Ethernet, wireless Ethernet) may be coupled toone or more input/output devices, such as a keyboard, a pointing device,a scanner, or a networking device such as a switch or router, e.g.,through a network adapter.

The computing device 1600 may be implemented in a number of differentforms, as shown in the figure. For example, it may be implemented as astandard server 1620, or multiple times in a group of such servers. Inaddition, it may be implemented in a personal computer such as a laptopcomputer 1622. It may also be implemented as part of a rack serversystem 1624. Alternatively, components from the computing device 800 maybe combined with other components in a mobile device (not shown), suchas a mobile computing device 1650. Each of such devices may contain oneor more of the computing device 1600 and the mobile computing device1650, and an entire system may be made up of multiple computing devicescommunicating with each other.

The mobile computing device 1650 may include a processor 1652, a memory1664, an input/output device such as a display 1654, a communicationinterface 1666, and a transceiver 868, among other components. Themobile computing device 1650 may also be provided with a storage device,such as a micro-drive or other device, to provide additional storage.Each of the processor 1652, the memory 1664, the display 1654, thecommunication interface 1666, and the transceiver 1668, areinterconnected using various buses, and several of the components may bemounted on a common motherboard or in other manners as appropriate.

The processor 1652 can execute instructions within the mobile computingdevice 1650, including instructions stored in the memory 1664. Theprocessor 1652 may be implemented as a chipset of chips that includeseparate and multiple analog and digital processors. The processor 1652may provide, for example, for coordination of the other components ofthe mobile computing device 1650, such as control of user interfaces,applications run by the mobile computing device 1650, and wirelesscommunication by the mobile computing device 1650.

The processor 1652 may communicate with a user through a controlinterface 1658 and a display interface 1656 coupled to the display 1654.The display 1654 may be, for example, a TFT (Thin-Film-Transistor LiquidCrystal Display) display or an OLED (Organic Light Emitting Diode)display, or other appropriate display technology. The display interface1656 may comprise appropriate circuitry for driving the display 1654 topresent graphical and other information to a user. The control interface1658 may receive commands from a user and convert them for submission tothe processor 1652. In addition, an external interface 1662 may providecommunication with the processor 1652, so as to enable near areacommunication of the mobile computing device 1650 with other devices.The external interface 1662 may provide, for example, for wiredcommunication in some implementations, or for wireless communication inother implementations, and multiple interfaces may also be used.

The memory 1664 stores information within the mobile computing device1650. The memory 1664 can be implemented as one or more of acomputer-readable medium or media, a volatile memory unit or units, or anon-volatile memory unit or units. An expansion memory 1674 may also beprovided and connected to the mobile computing device 1650 through anexpansion interface 1672, which may include, for example, a SIMM (SingleIn Line Memory Module) card interface. The expansion memory 1674 mayprovide extra storage space for the mobile computing device 1650, or mayalso store applications or other information for the mobile computingdevice 1650. Specifically, the expansion memory 1674 may includeinstructions to carry out or supplement the processes described above,and may include secure information also. Thus, for example, theexpansion memory 1674 may be provide as a security module for the mobilecomputing device 1650, and may be programmed with instructions thatpermit secure use of the mobile computing device 1650. In addition,secure applications may be provided via the SIMM cards, along withadditional information, such as placing identifying information on theSIMM card in a non-hackable manner.

The memory may include, for example, flash memory and/or NVRAM memory(non-volatile random access memory), as discussed below. In someimplementations, instructions are stored in an information carrier. thatthe instructions, when executed by one or more processing devices (forexample, processor 1652), perform one or more methods, such as thosedescribed above. The instructions can also be stored by one or morestorage devices, such as one or more computer- or machine-readablemediums (for example, the memory 1664, the expansion memory 1674, ormemory on the processor 1652). In some implementations, the instructionscan be received in a propagated signal, for example, over thetransceiver 1668 or the external interface 1662.

The mobile computing device 1650 may communicate wirelessly through thecommunication interface 1666, which may include digital signalprocessing circuitry where necessary. The communication interface 1666may provide for communications under various modes or protocols, such asGSM voice calls (Global System for Mobile communications), SMS (ShortMessage Service), EMS (Enhanced Messaging Service), or MMS messaging(Multimedia Messaging Service), CDMA (code division multiple access),TDMA (time division multiple access), PDC (Personal Digital Cellular),WCDMA (Wideband Code Division Multiple Access), CDMA2000, or GPRS(General Packet Radio Service), among others. Such communication mayoccur, for example, through the transceiver 1668 using aradio-frequency. In addition, short-range communication may occur, suchas using a Bluetooth®, Wi-Fi™, or other such transceiver (not shown). Inaddition, a GPS (Global Positioning System) receiver module 1670 mayprovide additional navigation- and location-related wireless data to themobile computing device 1650, which may be used as appropriate byapplications running on the mobile computing device 1650.

The mobile computing device 1650 may also communicate audibly using anaudio codec 1660, which may receive spoken information from a user andconvert it to usable digital information. The audio codec 1660 maylikewise generate audible sound for a user, such as through a speaker,e.g., in a handset of the mobile computing device 1650. Such sound mayinclude sound from voice telephone calls, may include recorded sound(e.g., voice messages, music files, etc.) and may also include soundgenerated by applications operating on the mobile computing device 1650.

The mobile computing device 1650 may be implemented in a number ofdifferent forms, as shown in the figure. For example, it may beimplemented as a cellular telephone 1680. It may also be implemented aspart of a smart-phone 1682, personal digital assistant, or other similarmobile device.

Various implementations of the systems and techniques described here canbe realized in digital electronic circuitry, integrated circuitry,specially designed ASICs (application specific integrated circuits),computer hardware, firmware, software, and/or combinations thereof.These various implementations can include implementation in one or morecomputer programs that are executable and/or interpretable on aprogrammable system including at least one programmable processor, whichmay be special or general purpose, coupled to receive data andinstructions from, and to transmit data and instructions to, a storagesystem, at least one input device, and at least one output device.

These computer programs (also known as programs, software, softwareapplications or code) include machine instructions for a programmableprocessor, and can be implemented in a high-level procedural and/orobject-oriented programming language, and/or in assembly/machinelanguage. As used herein, the terms machine-readable medium andcomputer-readable medium refer to any computer program product,apparatus and/or device (e.g., magnetic discs, optical disks, memory,Programmable Logic Devices (PLDs)) used to provide machine instructionsand/or data to a programmable processor, including a machine-readablemedium that receives machine instructions as a machine-readable signal.The term machine-readable signal refers to any signal used to providemachine instructions and/or data to a programmable processor.

To provide for interaction with a user, the systems and techniquesdescribed here can be implemented on a computer having a display device(e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor)for displaying information to the user and a keyboard and a pointingdevice (e.g., a mouse or a trackball) by which the user can provideinput to the computer. Other kinds of devices can be used to provide forinteraction with a user as well; for example, feedback provided to theuser can be any form of sensory feedback (e.g., visual feedback,auditory feedback, or tactile feedback); and input from the user can bereceived in any form, including acoustic, speech, or tactile input.

The systems and techniques described here can be implemented in acomputing system that includes a back end component (e.g., as a dataserver), or that includes a middleware component (e.g., an applicationserver), or that includes a front end component (e.g., a client computerhaving a graphical user interface or a Web browser through which a usercan interact with an implementation of the systems and techniquesdescribed here), or any combination of such back end, middleware, orfront end components. The components of the system can be interconnectedby any form or medium of digital data communication (e.g., acommunication network). Examples of communication networks include alocal area network (LAN), a wide area network (WAN), and the Internet.

The computing system can include clients and servers. A client andserver are generally remote from each other and typically interactthrough a communication network. The relationship of client and serverarises by virtue of computer programs running on the respectivecomputers and having a client-server relationship to each other.

In view of the structure, functions and apparatus of the systems andmethods described here, in some implementations, a system and method forcommunication using Dynamic REST messages are provided. Having describedcertain implementations of methods and apparatus for supportingcommunication using Dynamic REST messages, it will now become apparentto one of skill in the art that other implementations incorporating theconcepts of the disclosure may be used. Therefore, the disclosure shouldnot be limited to certain implementations, but rather should be limitedonly by the spirit and scope of the following claims.

What is claimed is:
 1. A communication device, comprising: a portconfigured to receive a plurality of binary data streams representing aplurality of messages, each of the data streams comprising a binaryheader and a binary body, each of the binary body having a metadataconstruct and a message construct, wherein the message constructcomprises one or more groups of data values, and the metadata constructcomprises one or more groups of description values corresponding to agiven data value of the one or more data values forming the messageconstruct; a memory storing a first structural description of the binaryheader and the binary body and a second structural description of themetadata construct; and a processor configured to parse a receivedbinary data stream to reproduce a received message, the processorparsing the received binary data stream using the first structuraldescription to determine the binary header and the binary body, theprocessor parsing the binary body using the second structuraldescription to determine the one or more groups of description valuesforming the metadata construct, wherein the processor uses a portion ofthe determined description values of the metadata construct to determinethe one or more groups of data values of the message construct.
 2. Thecommunication device of claim 1, wherein each of the one or more datavalues of the message construct and each of the one or more descriptionvalues of the metadata construct are delineated by a binary marker. 3.The communication device of claim 1, wherein each of the one or moregroups of description values forming the metadata construct comprises: adata-value name descriptor, a data-value description-descriptor, and adata value type-descriptor.
 4. The communication device of claim 1,wherein the metadata construct precedes the message construct in formingthe binary body.
 5. The communication device of claim 1, wherein thebinary header is unencrypted, and the binary body is encrypted.
 6. Thecommunication device of claim 1, wherein a portion of the metadataconstruct and a portion of the message construct correspond to a set ofcharacters defined by a universal standard code.
 7. The communicationdevice of claim 1, wherein the plurality of binary data streams isreceived via Web sockets.
 8. A computer-implemented method comprising:storing, at a memory, a first structural description of the binaryheader and the binary body and a second structural description of themetadata construct, wherein the metadata construct comprises one or moregroups of description values corresponding to a given data value of theone or more data values forming the message construct; receiving, at aport, a plurality of binary data streams representing a plurality ofmessages; parsing, using a processor, each of the plurality of receivedbinary data stream using the first structural description to determinethe binary header and the binary body; and parsing, using the processor,the parsed binary body using the second structural description todetermine the one or more groups of description values forming themetadata construct, wherein the processor uses a portion of thedetermined description values of the metadata construct to determine theone or more groups of data values of the message construct.
 9. Thecomputer-implemented method of claim 8, wherein each of the one or moredata values of the message construct and each of the one or moredescription value of the metadata construct are delineated by a binarymarker.
 10. The computer-implemented method of claim 8, wherein each ofthe one or more groups of description values forming the metadataconstruct comprises: a data-value name descriptor, a data-valuedescription-descriptor, and a data value type-descriptor.
 11. Thecomputer-implemented method of claim 8, wherein the metadata constructprecedes the message construct in forming the binary body.
 12. Thecomputer-implemented method of claim 8, wherein the binary header isunencrypted, and the binary body is encrypted.
 13. Thecomputer-implemented method of claim 8, wherein a portion of themetadata construct and a portion of the message construct correspond toa set of characters defined by a universal standard code.
 14. Thecomputer-implemented method of claim 1, wherein the plurality of binarydata streams is received via Web sockets.
 15. A non-transitory computerreadable medium having instruction stored thereon, wherein theinstructions, when executed by a processor at a platform server, causethe processor to: store a first structural description of the binaryheader and the binary body and a second structural description of themetadata construct, wherein the metadata construct comprises one or moregroups of description values corresponding to a given data value of theone or more data values forming the message construct; receive, at aport, a plurality of binary data streams representing a plurality ofmessages; parse each of the plurality of received binary data streamsusing the first structural description to determine the binary headerand the binary body; and parse, using the second structural description,the parsed binary body to determine the one or more groups ofdescription values forming the metadata construct, wherein the processoruses a portion of the determined description values of the metadataconstruct to determine the one or more groups of data values of themessage construct.
 16. The computer readable claim of claim 15, whereineach of the one or more data values of the message construct and each ofthe one or more description value of the metadata construct aredelineated by a binary marker.
 17. The computer readable claim of claim15, wherein each of the one or more groups of description values formingthe metadata construct comprises: a data-value name descriptor, adata-value description-descriptor, and a data value type-descriptor. 18.The computer readable claim of claim 15, wherein the metadata constructprecedes the message construct in forming the binary body.
 19. Thecomputer readable claim of claim 15, wherein a portion of the metadataconstruct and a portion of the message construct correspond to a set ofcharacters defined by a universal standard code.
 20. The computerreadable claim 15, wherein the plurality of binary data streams isreceived via Web sockets.